TypeScript types for Enonic XP
This library contains TypeScript types for Enonic XP.
Code generation
We recommend using this library together with the xp-codegen-plugin Gradle plugin. xp-codegen-plugin will create TypeScript interfaces
for your content-types. Those interfaces will be very useful together with this library.
Example
We have an Enonic service that returns an article by id.
import { Request, Response } from "enonic-types/controller";
import { Article } from "../../site/content-types/article/article";
const contentLib = __non_webpack_require__("/lib/xp/content");
export function get(req: Request): Response {
const content = contentLib.get<Article>({ key: req.params.id! });
if (content !== null) {
const article: Article = content.data;
return { status: 200, body: article }
} else {
return { status: 404 };
}
}
- We import an
interface Article { ... }
generated by xp-codegen-plugin. - When we import something with
__non_webpack_require__
, it will automatically look up the correct interfaces for
XP-libraries if __non_webpack_require__
is defined correctly (see below). - We use the imported
Request
and Response
to control the shape of our controller. content
is of the type Content<Article> | null
, so we have to do a null check before proceiding.
Declare __non_webpack_require__
Your project should have a types.ts file where you can specify declarations.
If you add (or replace the existing)
__non_webpack_require__()
function with the following code, it will automatically look up the correct interfaces for
Enonic XP-libraries.
type LibMap = import("enonic-types").EnonicLibraryMap;
declare const __non_webpack_require__: <K extends keyof LibMap | string = string>(path: K) => K extends keyof LibMap
? LibMap[K]
: any;
Supported libraries